//
//  queue.h
//  queueADT
//
//  Created by chenyh on 2021/1/20.
//

#ifndef queue_h
#define queue_h

#include <stdio.h>
#include <stdbool.h>
/**
 队列是具有两个特殊属性的链表。
 第一：新项只能添加到链表的末尾。
 第二：只能从链表的开头移除项。
 遵循的是：先进先出 FIFO
 类型名：         队列
 类型属性：       可以存储一系列项
 类型操作：       初始化队列为空
                确定队列为空
                确定队列已满
                确定队列中的项数
                在队列末尾中添加项
                在队列开头删除或恢复项
                清空队列
 */

typedef int Item;
typedef struct node {
    Item item;
    struct node * next;
} Node;
typedef struct queue {
    Node * front;    //指向队列首项的指针
    Node * rear;    //指向队列尾项的指针
    int items;      //队列中的项数
} Queue;
//注意Queue是一个内含3个成员的结构，
//所以用指向队列的指针作为参数比直接用队列作为参数节约了时间和空间。

#define MAXQUEUE 10

void InitializeQueue(Queue *pq);
bool QueueIsFull(const Queue * pq);
bool QueueIsEmpty(const Queue * pq);
int  QueueItemCount(const Queue * pq);
bool EnQueue(Item item,Queue * pq);
bool DeQueue(Item * pitem,Queue * pq);
void EmptyTheQueue(Queue * pq);


#endif /* queue_h */
